home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d939.lha / ExtraCmds / source_etc.lha / src / Lower.c < prev    next >
C/C++ Source or Header  |  1993-10-22  |  3KB  |  108 lines

  1. /*   ---------------------------------      -------     
  2.  *   |\  | | | | |  |.| |   \|  |/ /|\      |||||||     
  3.  *   | | | |/  | |\ |/  |/|  |\ |/  |    ?  ---+---  =< 
  4.  *   | | | |   | |  |     |  |  |   |     \qqqqqqqqq/   
  5.  *   ---------------------------------  ~~~~~~~~~~~~~~~~
  6.  *  Lower - run a command at a nice, possibly lower, priority.
  7.  *  Copyright (C) 1992 Torsten Poulin
  8.  *
  9.  *  This program is free software; you can redistribute it and/or modify
  10.  *  it under the terms of the GNU General Public License as published by
  11.  *  the Free Software Foundation; either version 2 of the License, or
  12.  *  (at your option) any later version.
  13.  *
  14.  *  This program is distributed in the hope that it will be useful,
  15.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  *  GNU General Public License for more details.
  18.  *
  19.  *  You should have received a copy of the GNU General Public License
  20.  *  along with this program; if not, write to the Free Software
  21.  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22.  *
  23.  *  The author can be contacted by s-mail at
  24.  *    Torsten Poulin
  25.  *    Banebrinken 99, 2, 77
  26.  *    DK-2400 Copenhagen NV
  27.  *    DENMARK
  28.  *
  29.  * Created 16-Jan-92 (37.1)
  30.  * $Id: Lower.c,v 37.2 93/02/13 16:01:54 Torsten Rel $
  31.  * $Log:    Lower.c,v $
  32.  * Revision 37.2  93/02/13  16:01:54  Torsten
  33.  * Changed version tag etc.
  34.  * 
  35.  */
  36.  
  37. #include <exec/types.h>
  38. #include <exec/tasks.h>
  39. #include <exec/libraries.h>
  40. #include <dos/dos.h>
  41. #include <dos/dostags.h>
  42. #include <proto/exec.h>
  43. #include <proto/dos.h>
  44. #include "lower_rev.h"
  45.  
  46. static LONG MySystemTags(struct DosLibrary *DOSBase,
  47.                          UBYTE *command, ULONG firsttag, ...);
  48.  
  49. char const versionID[] = VERSTAG;
  50. char const copyright[] = "$COPYRIGHT:© 1992 Torsten Poulin$";
  51.  
  52. int entrypoint(void)
  53. {
  54.     struct RDArgs     *args;
  55.     struct DosLibrary *DOSBase;
  56.     struct Library    *SysBase;
  57.     LONG niceval, stack;
  58.     LONG arg[3];
  59.     LONG rc = RETURN_OK;
  60.  
  61.     SysBase = *(struct Library **) 4L;
  62.     if(!(DOSBase = (struct DosLibrary *) OpenLibrary("dos.library", 37L)))
  63.         return RETURN_FAIL;
  64.  
  65.     arg[0] = arg[1] = arg[2] = 0L;
  66.     
  67.     if(args = ReadArgs("BY/K/N,STACK/K/N,COMMAND/F/A", arg, NULL))
  68.     {
  69.         niceval = (FindTask(NULL))->tc_Node.ln_Pri;
  70.         if(arg[0])
  71.             niceval -= *(LONG *) arg[0];
  72.         else
  73.             niceval--;
  74.         if(niceval < -128L) niceval = -128L;
  75.         else if(niceval > 10L) niceval = 10L;
  76.  
  77.         if(arg[1])
  78.             stack = (*(LONG *) arg[1]) < 1600L ? 1600L : *(LONG *) arg[1];
  79.         else
  80.             stack = (Cli())->cli_DefaultStack << 2;
  81.                
  82.         rc = MySystemTags(DOSBase, (UBYTE *) arg[2],
  83.                           SYS_UserShell, TRUE,
  84.                           NP_Priority,   niceval,
  85.                           NP_StackSize,  stack,
  86.                           TAG_DONE);
  87.         if(rc == -1)
  88.             rc = RETURN_ERROR;
  89.  
  90.         FreeArgs(args);
  91.     }
  92.     else
  93.     {
  94.         LONG err = IoErr();
  95.         PrintFault(err, "Lower");
  96.         rc = RETURN_ERROR;
  97.     }
  98.     CloseLibrary((struct Library *) DOSBase);
  99.     return rc;
  100. }
  101.  
  102.  
  103. static LONG MySystemTags(struct DosLibrary *DOSBase,
  104.                          UBYTE *command, ULONG firsttag, ...)
  105. {
  106.     return SystemTagList(command, (struct TagItem *) &firsttag);
  107. }
  108.